//
//  NSCharacterSet.swift
//  Documentation
//
//  Created by Toj on 28/12/23.
//
//  字符集
//

public var NSOpenStepUnicodeReservedBase: Int { get }

open class NSCharacterSet : NSObject, NSCopying, NSMutableCopying, NSSecureCoding {

    /// 控制符的字符集
    open class var controlCharacters: CharacterSet { get }

    /// 空格的字符
    open class var whitespaces: CharacterSet { get }

    /// 空格和换行符的字符
    open class var whitespacesAndNewlines: CharacterSet { get }

    /// 数字字符集
    open class var decimalDigits: CharacterSet { get }

    /// 字母字符集
    open class var letters: CharacterSet { get }

    /// 小写字母字符集
    open class var lowercaseLetters: CharacterSet { get }

    /// 大写字母字符集
    open class var uppercaseLetters: CharacterSet { get }

    /// 非基础的字符集
    open class var nonBaseCharacters: CharacterSet { get }

    /// 字母和数字的字符集
    open class var alphanumerics: CharacterSet { get }

    /// 可分解
    open class var decomposables: CharacterSet { get }

    /// 非法的字符集
    open class var illegalCharacters: CharacterSet { get }

    /// 标点的字符集
    open class var punctuationCharacters: CharacterSet { get }

    /// 首字母大写的字符集
    open class var capitalizedLetters: CharacterSet { get }

    /// 符号的字符集
    open class var symbols: CharacterSet { get }

    /// 换行符的字符集
    open class var newlines: CharacterSet { get }

    // MARK: 初始化 自定义 字符集
    
    // 返回一个指定范围的字符集,取自小写字母字符集
    public /*not inherited*/ init(range aRange: NSRange)
    
    // 返回一个包含当前字符串的字符集
    public /*not inherited*/ init(charactersIn aString: String)

    // 返回包含由给定位图表示形式确定的字符的字符集,
    // 此方法对于使用来自文件或其他外部数据源的数据创建字符集
    public /*not inherited*/ init(bitmapRepresentation data: Data)

    // 返回从位图表示中读取的字符集, 存储在文件中给定的路径.
    public /*not inherited*/ init?(contentsOfFile fName: String)

    
    public init(coder: NSCoder)

    // 指定字符集是包含于在于当前字符集
    open func characterIsMember(_ aCharacter: unichar) -> Bool
    // 以二进制格式编码接收器的NSData对象,
    // 此格式适用于保存到文件或以其他方式传输或归档
    open var bitmapRepresentation: Data { get }
    // 反转字符集,仅包含当前字符集中不存在的字符
    open var inverted: CharacterSet { get }

    
    // 这里涉及到Basic Multilingual Plane (Unicode平面映射) 的东西,
    // 表示是否包含某plan的成员
    open func longCharacterIsMember(_ theLongChar: UTF32Char) -> Bool

    
    // 表示是否为某集合的超集
    open func isSuperset(of theOtherSet: CharacterSet) -> Bool

    // 表示是否包含一个长字符，此方法支持32位字符规范
    open func hasMemberInPlane(_ thePlane: UInt8) -> Bool
}
